hvm: e820 public header cleanup.
authorKeir Fraser <keir@xensource.com>
Sun, 10 Jun 2007 18:49:44 +0000 (19:49 +0100)
committerKeir Fraser <keir@xensource.com>
Sun, 10 Jun 2007 18:49:44 +0000 (19:49 +0100)
Signed-off-by: Keir Fraser <keir@xensource.com>
17 files changed:
tools/firmware/hvmloader/e820.h [new file with mode: 0644]
tools/firmware/hvmloader/hvmloader.c
tools/firmware/hvmloader/smbios.c
tools/firmware/hvmloader/util.c
tools/firmware/hvmloader/util.h
tools/firmware/vmxassist/setup.c
tools/firmware/vmxassist/util.h
tools/ioemu/target-i386-dm/exec-dm.c
tools/ioemu/vl.h
tools/libxc/xc_dom_x86.c
tools/libxc/xc_domain.c
tools/libxc/xc_domain_save.c
tools/libxc/xc_e820.h [new file with mode: 0644]
tools/libxc/xc_hvm_build.c
xen/arch/x86/domctl.c
xen/include/asm-x86/e820.h
xen/include/public/hvm/e820.h

diff --git a/tools/firmware/hvmloader/e820.h b/tools/firmware/hvmloader/e820.h
new file mode 100644 (file)
index 0000000..f59f70c
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef __HVMLOADER_E820_H__
+#define __HVMLOADER_E820_H__
+
+#include <xen/hvm/e820.h>
+
+/*
+ * PC BIOS standard E820 types and structure.
+ */
+#define E820_RAM          1
+#define E820_RESERVED     2
+#define E820_ACPI         3
+#define E820_NVS          4
+
+struct e820entry {
+    uint64_t addr;
+    uint64_t size;
+    uint32_t type;
+} __attribute__((packed));
+
+#define HVM_E820_NR ((unsigned char *)HVM_E820_PAGE + HVM_E820_NR_OFFSET)
+#define HVM_E820    ((struct e820entry *)(HVM_E820_PAGE + HVM_E820_OFFSET))
+
+#endif /* __HVMLOADER_E820_H__ */
index 7f34895636dd8fcd394ac81d4bdcf5f83ba83e83..0e1e9bfac17b4fd73f4739dfca56ccaf7c15ea00 100644 (file)
@@ -27,6 +27,7 @@
 #include "config.h"
 #include "apic_regs.h"
 #include "pci_regs.h"
+#include "e820.h"
 #include <xen/version.h>
 #include <xen/hvm/params.h>
 
@@ -311,8 +312,8 @@ static int must_load_nic(void)
 /* Replace possibly erroneous memory-size CMOS fields with correct values. */
 static void cmos_write_memory_size(void)
 {
-    struct e820entry *map = E820_MAP;
-    int i, nr = *E820_MAP_NR;
+    struct e820entry *map = HVM_E820;
+    int i, nr = *HVM_E820_NR;
     uint32_t base_mem = 640, ext_mem = 0, alt_mem = 0;
 
     for ( i = 0; i < nr; i++ )
index 55de11a030923b60a57839b9da4494642677523a..93f89e38f066bdadb2e8b2256ccb3e64968efec1 100644 (file)
@@ -25,6 +25,7 @@
 #include "smbios_types.h"
 #include "util.h"
 #include "hypercall.h"
+#include "e820.h"
 
 static int
 write_smbios_tables(void *start,
@@ -131,8 +132,8 @@ write_smbios_tables(void *start,
 static uint64_t
 get_memsize(void)
 {
-    struct e820entry *map = E820_MAP;
-    uint8_t num_entries = *E820_MAP_NR;
+    struct e820entry *map = HVM_E820;
+    uint8_t num_entries = *HVM_E820_NR;
     uint64_t memsize = 0;
     int i;
 
index 23f819f39909ffb57ac6254f5dadffbf69e1b2f0..dd69f800355c206b80d776b065d536b0e04808a1 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "util.h"
 #include "config.h"
+#include "e820.h"
 #include <stdint.h>
 #include <xenctrl.h>
 #include <xen/hvm/hvm_info_table.h>
@@ -286,16 +287,16 @@ uuid_to_string(char *dest, uint8_t *uuid)
 static void e820_collapse(void)
 {
     int i = 0;
-    struct e820entry *ent = (struct e820entry *)E820_MAP;
+    struct e820entry *ent = (struct e820entry *)HVM_E820;
 
-    while ( i < (*E820_MAP_NR-1) )
+    while ( i < (*HVM_E820_NR-1) )
     {
         if ( (ent[i].type == ent[i+1].type) &&
              ((ent[i].addr + ent[i].size) == ent[i+1].addr) )
         {
             ent[i].size += ent[i+1].size;
-            memcpy(&ent[i+1], &ent[i+2], (*E820_MAP_NR-i-2) * sizeof(*ent));
-            (*E820_MAP_NR)--;
+            memcpy(&ent[i+1], &ent[i+2], (*HVM_E820_NR-i-2) * sizeof(*ent));
+            (*HVM_E820_NR)--;
         }
         else
         {
@@ -308,12 +309,12 @@ uint32_t e820_malloc(uint32_t size)
 {
     uint32_t addr;
     int i;
-    struct e820entry *ent = (struct e820entry *)E820_MAP;
+    struct e820entry *ent = (struct e820entry *)HVM_E820;
 
     /* Align allocation request to a reasonable boundary (1kB). */
     size = (size + 1023) & ~1023;
 
-    for ( i = *E820_MAP_NR - 1; i >= 0; i-- )
+    for ( i = *HVM_E820_NR - 1; i >= 0; i-- )
     {
         addr = ent[i].addr;
         if ( (ent[i].type != E820_RAM) || /* not ram? */
@@ -324,8 +325,8 @@ uint32_t e820_malloc(uint32_t size)
 
         if ( ent[i].size != size )
         {
-            memmove(&ent[i+1], &ent[i], (*E820_MAP_NR-i) * sizeof(*ent));
-            (*E820_MAP_NR)++;
+            memmove(&ent[i+1], &ent[i], (*HVM_E820_NR-i) * sizeof(*ent));
+            (*HVM_E820_NR)++;
             ent[i].size -= size;
             addr += ent[i].size;
             i++;
index 88b9c4a4298155fef838431d0acdffad30a974d2..42b20bdf0951252c01e502132045f70b513d0731 100644 (file)
@@ -84,11 +84,6 @@ int vprintf(const char *fmt, va_list ap);
 /* Reserve a RAM region in the e820 table. */
 uint32_t e820_malloc(uint32_t size);
 
-/* General e820 access. */
-#include <xen/hvm/e820.h>
-#define E820_MAP_NR ((unsigned char *)E820_MAP_PAGE + E820_MAP_NR_OFFSET)
-#define E820_MAP    ((struct e820entry *)(E820_MAP_PAGE + E820_MAP_OFFSET))
-
 /* Prepare the 32bit BIOS */
 void highbios_setup(void);
 
index f2f73996f05a381a942f4babf8e3e4b218f73017..bc7c5733484be232dbaf6c8dc796fb696c83ef39 100644 (file)
@@ -91,13 +91,13 @@ banner(void)
        e820map[6].addr = memory_size;
        e820map[7].addr += memory_size;
 
-       *E820_MAP_NR = sizeof(e820map)/sizeof(e820map[0]);
-       memcpy(E820_MAP, e820map, sizeof(e820map));
+       *HVM_E820_NR = sizeof(e820map)/sizeof(e820map[0]);
+       memcpy(HVM_E820, e820map, sizeof(e820map));
 #endif
 
        printf("Memory size %ld MB\n", memory_size >> 20);
        printf("E820 map:\n");
-       print_e820_map(E820_MAP, *E820_MAP_NR);
+       print_e820_map(HVM_E820, *HVM_E820_NR);
        printf("\n");
 }
 
index c426f4e846c9a974604d8fd1b249002fccb318fd..5ef3d69a023142dee3e8472938d219d2fafe3c36 100644 (file)
 #include <stdarg.h>
 #include <vm86.h>
 
-#include <xen/hvm/e820.h>
-#define E820_MAP_NR ((unsigned char *)E820_MAP_PAGE + E820_MAP_NR_OFFSET)
-#define E820_MAP    ((struct e820entry *)(E820_MAP_PAGE + E820_MAP_OFFSET))
-
 #define        offsetof(type, member)  ((unsigned) &((type *)0)->member)
 
 struct vmx_assist_context;
 
+#include "../hvmloader/e820.h"
+
 extern void cpuid_addr_value(uint64_t addr, uint64_t *value);
 extern void hexdump(unsigned char *, int);
 extern void dump_regs(struct regs *);
index ceb29860e21ac1f463af6abad054b3756797116b..3c66f06476e08bce0f700acebebe3fb2d15241b6 100644 (file)
@@ -32,8 +32,6 @@
 #include <unistd.h>
 #include <inttypes.h>
 
-#include <xen/hvm/e820.h>
-
 #include "cpu.h"
 #include "exec-all.h"
 #include "vl.h"
index 70b36f98fef1f819e2f0f5e6a0384e06a306de91..3e4e191e2eada23d97ec63f5081e38947651d8bb 100644 (file)
@@ -39,7 +39,6 @@
 #include <sys/stat.h>
 #include "xenctrl.h"
 #include "xs.h"
-#include <xen/hvm/e820.h>
 
 #ifndef O_LARGEFILE
 #define O_LARGEFILE 0
index c94dfe0ea8ab25909c4aed89957997621fac6d61..bbb4e1c9bc203983f2278c07389e7d0845c69188 100644 (file)
@@ -18,7 +18,6 @@
 #include <xen/foreign/x86_32.h>
 #include <xen/foreign/x86_64.h>
 #include <xen/hvm/hvm_info_table.h>
-#include <xen/hvm/e820.h>
 #include <xen/io/protocols.h>
 
 #include "xg_private.h"
index 948aa3408847523a8b3a4c96d8569efd53607574..92a8b985111a3475712f9014c49cae28cb599378 100644 (file)
@@ -372,7 +372,7 @@ int xc_domain_setmaxmem(int xc_handle,
 }
 
 #if defined(__i386__) || defined(__x86_64__)
-#include <xen/hvm/e820.h>
+#include "xc_e820.h"
 int xc_domain_set_memmap_limit(int xc_handle,
                                uint32_t domid,
                                unsigned long map_limitkb)
index 32002e001732c190ec7161f20e0b52d8b740d6a2..abd3cedf32217c405e18872d8a25e9a90447c451 100644 (file)
@@ -18,7 +18,7 @@
 #include "xg_save_restore.h"
 
 #include <xen/hvm/params.h>
-#include <xen/hvm/e820.h>
+#include "xc_e820.h"
 
 /*
 ** Default values for important tuning parameters. Can override by passing
diff --git a/tools/libxc/xc_e820.h b/tools/libxc/xc_e820.h
new file mode 100644 (file)
index 0000000..52bbb0f
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef __XC_E820_H__
+#define __XC_E820_H__
+
+#include <xen/hvm/e820.h>
+
+/*
+ * PC BIOS standard E820 types and structure.
+ */
+#define E820_RAM          1
+#define E820_RESERVED     2
+#define E820_ACPI         3
+#define E820_NVS          4
+
+struct e820entry {
+    uint64_t addr;
+    uint64_t size;
+    uint32_t type;
+} __attribute__((packed));
+
+#endif /* __XC_E820_H__ */
index 084c848bd8f4627752c9f24f624ffd709e139bb5..f3a0707a31678e252f38e05ee08de3fc7a14b30c 100644 (file)
@@ -15,7 +15,7 @@
 #include <xen/foreign/x86_64.h>
 #include <xen/hvm/hvm_info_table.h>
 #include <xen/hvm/params.h>
-#include <xen/hvm/e820.h>
+#include "xc_e820.h"
 
 #include <xen/libelf.h>
 
@@ -32,7 +32,7 @@ typedef union
 static void build_e820map(void *e820_page, unsigned long long mem_size)
 {
     struct e820entry *e820entry =
-        (struct e820entry *)(((unsigned char *)e820_page) + E820_MAP_OFFSET);
+        (struct e820entry *)(((unsigned char *)e820_page) + HVM_E820_OFFSET);
     unsigned long long extra_mem_size = 0;
     unsigned char nr_map = 0;
 
@@ -105,7 +105,7 @@ static void build_e820map(void *e820_page, unsigned long long mem_size)
         nr_map++;
     }
 
-    *(((unsigned char *)e820_page) + E820_MAP_NR_OFFSET) = nr_map;
+    *(((unsigned char *)e820_page) + HVM_E820_NR_OFFSET) = nr_map;
 }
 
 static int loadelfimage(
@@ -226,7 +226,7 @@ static int setup_guest(int xc_handle,
 
     if ( (e820_page = xc_map_foreign_range(
               xc_handle, dom, PAGE_SIZE, PROT_READ | PROT_WRITE,
-              E820_MAP_PAGE >> PAGE_SHIFT)) == NULL )
+              HVM_E820_PAGE >> PAGE_SHIFT)) == NULL )
         goto error_out;
     memset(e820_page, 0, PAGE_SIZE);
     build_e820map(e820_page, v_end);
index 7bbd00b3b5977e75d28f88674e7f877156b2378b..36dd4a57193a84203a488791d29c36114180b274 100644 (file)
@@ -24,7 +24,6 @@
 #include <asm/hvm/hvm.h>
 #include <asm/hvm/support.h>
 #include <asm/processor.h>
-#include <public/hvm/e820.h>
 
 long arch_do_domctl(
     struct xen_domctl *domctl,
index 094aafce8225a37f3dbbe7bd29fd325a60b6e5c1..1d3a981f2ee3380883d49b3e0b2c54cf8324a091 100644 (file)
@@ -1,7 +1,19 @@
 #ifndef __E820_HEADER
 #define __E820_HEADER
 
-#include <public/hvm/e820.h>
+/*
+ * PC BIOS standard E820 types and structure.
+ */
+#define E820_RAM          1
+#define E820_RESERVED     2
+#define E820_ACPI         3
+#define E820_NVS          4
+
+struct e820entry {
+    uint64_t addr;
+    uint64_t size;
+    uint32_t type;
+} __attribute__((packed));
 
 #define E820MAX        128
 
index dc683720bc5949d0fe37568c04e47b2623e0520f..5bdc227416f7e8c042f285f5c17ed07e9cfb8728 100644 (file)
 #ifndef __XEN_PUBLIC_HVM_E820_H__
 #define __XEN_PUBLIC_HVM_E820_H__
 
-/* PC BIOS standard E820 types. */
-#define E820_RAM          1
-#define E820_RESERVED     2
-#define E820_ACPI         3
-#define E820_NVS          4
-
 /* E820 location in HVM virtual address space. */
-#define E820_MAP_PAGE        0x00090000
-#define E820_MAP_NR_OFFSET   0x000001E8
-#define E820_MAP_OFFSET      0x000002D0
-
-struct e820entry {
-    uint64_t addr;
-    uint64_t size;
-    uint32_t type;
-} __attribute__((packed));
+#define HVM_E820_PAGE        0x00090000
+#define HVM_E820_NR_OFFSET   0x000001E8
+#define HVM_E820_OFFSET      0x000002D0
 
 #define HVM_BELOW_4G_RAM_END        0xF0000000
-
 #define HVM_BELOW_4G_MMIO_START     HVM_BELOW_4G_RAM_END
 #define HVM_BELOW_4G_MMIO_LENGTH    ((1ULL << 32) - HVM_BELOW_4G_MMIO_START)